]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
shell/app: Do not include OR windows in get_windows()
authorFlorian Müllner <fmuellner@gnome.org>
Sun, 20 Mar 2022 18:15:58 +0000 (19:15 +0100)
committerMarge Bot <marge-bot@gnome.org>
Mon, 28 Mar 2022 15:54:33 +0000 (15:54 +0000)
We started tracking all windows to make sure the assumption that any
window can be match to an app holds. It is not expected however to
ever represent OR windows in the UI, so it seems better to exclude
them from get_windows() instead of expecting everyone to filter the
return value themselves.

(The returned list still includes "uninteresting" windows like attached
dialogs, which can be important for cases like the correct MRU order in
alt-tab)

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5233

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2252>

src/shell-app.c

index 43b0980205e026bf4b5e46c7999e3d32c0ee55ca..15109713877b07c326b76e90a71c4d7f1e182536 100644 (file)
@@ -422,7 +422,7 @@ shell_app_activate_window (ShellApp     *app,
                            MetaWindow   *window,
                            guint32       timestamp)
 {
-  GSList *windows;
+  g_autoptr (GSList) windows = NULL;
 
   if (shell_app_get_state (app) != SHELL_APP_STATE_RUNNING)
     return;
@@ -782,11 +782,14 @@ shell_app_compare_windows (gconstpointer   a,
  * active workspace, then by whether they're visible, and finally
  * by the time the user last interacted with them.
  *
- * Returns: (transfer none) (element-type MetaWindow): List of windows
+ * Returns: (transfer container) (element-type MetaWindow): List of windows
  */
 GSList *
 shell_app_get_windows (ShellApp *app)
 {
+  GSList *windows = NULL;
+  GSList *l;
+
   if (app->running_state == NULL)
     return NULL;
 
@@ -799,7 +802,11 @@ shell_app_get_windows (ShellApp *app)
       app->running_state->window_sort_stale = FALSE;
     }
 
-  return app->running_state->windows;
+  for (l = app->running_state->windows; l; l = l->next)
+    if (!meta_window_is_override_redirect (META_WINDOW (l->data)))
+      windows = g_slist_prepend (windows, l->data);
+
+  return g_slist_reverse (windows);
 }
 
 guint
@@ -1201,7 +1208,7 @@ GSList *
 shell_app_get_pids (ShellApp *app)
 {
   GSList *result;
-  GSList *iter;
+  g_autoptr (GSList) iter = NULL;
 
   result = NULL;
   for (iter = shell_app_get_windows (app); iter; iter = iter->next)